home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1996 July / Macworld (1996-07).dmg / For your System Folder / Sound Manager 3.2a2 / SoundComponents.p < prev    next >
Text File  |  1995-11-24  |  15KB  |  368 lines

  1. {
  2.      File:        SoundComponents.p
  3.  
  4.      Contains:    Sound Components Interfaces.
  5.  
  6.      Version:    ETO
  7.  
  8.      DRI:        Jim Reekes
  9.  
  10.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  14.                  stack.  Include the file and version information (from above)
  15.                  in the problem description and send to:
  16.                      Internet:    apple.bugs@applelink.apple.com
  17.                      AppleLink:    APPLE.BUGS
  18.  
  19. }
  20.  
  21. {$IFC UNDEFINED UsingIncludes}
  22. {$SETC UsingIncludes := 0}
  23. {$ENDC}
  24.  
  25. {$IFC NOT UsingIncludes}
  26.  UNIT SoundComponents;
  27.  INTERFACE
  28. {$ENDC}
  29.  
  30. {$IFC UNDEFINED __SOUNDCOMPONENTS__}
  31. {$SETC __SOUNDCOMPONENTS__ := 1}
  32.  
  33. {$I+}
  34. {$SETC SoundComponentsIncludes := UsingIncludes}
  35. {$SETC UsingIncludes := 1}
  36.  
  37.  
  38. {$IFC UNDEFINED __TYPES__}
  39. {$I Types.p}
  40. {$ENDC}
  41. {    ConditionalMacros.p                                            }
  42.  
  43. {$IFC UNDEFINED __COMPONENTS__}
  44. {$I Components.p}
  45. {$ENDC}
  46. {    MixedMode.p                                                    }
  47.  
  48. {$IFC UNDEFINED __SOUND__}
  49. {$I Sound.p}
  50. {$ENDC}
  51.  
  52. {$PUSH}
  53. {$ALIGN MAC68K}
  54. {$LibExport+}
  55. {
  56.                         * * *  N O T E  * * *
  57.  
  58.     This file has been updated to include Sound Manager 3.1 interfaces.
  59.  
  60.     Some of the Sound Manager 3.0 interfaces were not put into the InterfaceLib
  61.     that originally shipped with the PowerMacs. These missing functions and the
  62.     new 3.1 interfaces have been released in the SoundLib library for PowerPC
  63.     developers to link with. The runtime library for these functions are
  64.     installed by Sound Manager 3.1. The following functions are found in SoundLib.
  65.  
  66.         AudioGetBass, AudioGetInfo, AudioGetMute, AudioGetOutputDevice,
  67.         AudioGetTreble, AudioGetVolume, AudioMuteOnEvent, AudioSetBass,
  68.         AudioSetMute, AudioSetToDefaults, AudioSetTreble, AudioSetVolume,
  69.         OpenMixerSoundComponent, CloseMixerSoundComponent, SoundComponentAddSource,
  70.         SoundComponentGetInfo, SoundComponentGetSource, SoundComponentGetSourceData,
  71.         SoundComponentInitOutputDevice, SoundComponentPauseSource,
  72.         SoundComponentPlaySourceBuffer, SoundComponentRemoveSource,
  73.         SoundComponentSetInfo, SoundComponentSetOutput, SoundComponentSetSource,
  74.         SoundComponentStartSource, SoundComponentStopSource
  75. }
  76. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  77. { constants}
  78. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  79.  
  80. CONST
  81. {sound component set/get info selectors}
  82.     siVolume                    = 'volu';
  83.     siHardwareVolume            = 'hvol';
  84.     siSpeakerVolume                = 'svol';
  85.     siHeadphoneVolume            = 'pvol';
  86.     siHardwareVolumeSteps        = 'hstp';
  87.     siHeadphoneVolumeSteps        = 'hdst';
  88.     siHardwareMute                = 'hmut';
  89.     siSpeakerMute                = 'smut';
  90.     siHeadphoneMute                = 'pmut';
  91.     siRateMultiplier            = 'rmul';
  92.     siQuality                    = 'qual';
  93.     siWideStereo                = 'wide';
  94. {format types}
  95.     kOffsetBinary                = 'raw ';
  96.     kTwosComplement                = 'twos';
  97.     kMACE3Compression            = 'MAC3';
  98.     kMACE6Compression            = 'MAC6';
  99.  
  100. {quality flags}
  101. {use interpolation in rate conversion}
  102.     kBestQuality                = 0+(1 * (2**(0)));
  103.  
  104. {useful bit masks}
  105.     kInputMask                    = $000000FF;                    {masks off input bits}
  106.     kOutputMask                    = $0000FF00;                    {masks off output bits}
  107.     kOutputShift                = 8;                            {amount output bits are shifted}
  108.     kActionMask                    = $00FF0000;                    {masks off action bits}
  109.     kSoundComponentBits            = $00FFFFFF;
  110.  
  111. {SoundComponentPlaySourceBuffer action flags}
  112.     kSourcePaused                = 0+(1 * (2**(0)));
  113.     kPassThrough                = 0+(1 * (2**(16)));
  114.     kNoSoundComponentChain        = 0+(1 * (2**(17)));
  115. {flags for OpenMixerSoundComponent}
  116.     kNoMixing                    = 0+(1 * (2**(0)));                {don't mix source}
  117.     kNoSampleRateConversion        = 0+(1 * (2**(1)));                {don't convert sample rate (i.e. 11 kHz -> 22 kHz)}
  118.     kNoSampleSizeConversion        = 0+(1 * (2**(2)));                {don't convert sample size (i.e. 16 -> 8)}
  119.     kNoSampleFormatConversion    = 0+(1 * (2**(3)));                {don't convert sample format (i.e. 'twos' -> 'raw ')}
  120.     kNoChannelConversion        = 0+(1 * (2**(4)));                {don't convert stereo/mono}
  121.     kNoDecompression            = 0+(1 * (2**(5)));                {don't decompress (i.e. 'MAC3' -> 'raw ')}
  122.     kNoVolumeConversion            = 0+(1 * (2**(6)));                {don't apply volume}
  123.     kNoRealtimeProcessing        = 0+(1 * (2**(7)));                {won't run at interrupt time}
  124.  
  125. {Audio Component constants}
  126. {Values for whichChannel parameter}
  127.     audioAllChannels            = 0;                            {All channels (usually interpreted as both left and right)}
  128.     audioLeftChannel            = 1;                            {Left channel}
  129.     audioRightChannel            = 2;                            {Right channel}
  130. {Values for mute parameter}
  131.     audioUnmuted                = 0;                            {Device is unmuted}
  132.     audioMuted                    = 1;                            {Device is muted}
  133. {Capabilities flags definitions}
  134.     audioDoesMono                = 0+(1 * (2**(0)));                {Device supports mono output}
  135.     audioDoesStereo                = 0+(1 * (2**(1)));                {Device supports stereo output}
  136.     audioDoesIndependentChannels = 0+(1 * (2**(2)));            {Device supports independent software control of each channel}
  137.  
  138. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  139. { typedefs}
  140. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  141. {ShortFixed consists of an 8 bit, 2's complement integer part in the high byte,}
  142. {with an 8 bit fractional part in the low byte; its range is -128 to 127.99609375}
  143.     
  144. TYPE
  145.     ShortFixed = INTEGER;
  146.  
  147.     SoundParamBlockPtr = ^SoundParamBlock;
  148.  
  149.     SoundParamProcPtr = ProcPtr;  { FUNCTION SoundParam(VAR pb: SoundParamBlockPtr): BOOLEAN; }
  150.     SoundParamUPP = UniversalProcPtr;
  151.  
  152.     SoundParamBlock = RECORD
  153.         recordSize:                LONGINT;                                {size of this record in bytes}
  154.         desc:                    SoundComponentData;                        {description of sound buffer}
  155.         rateMultiplier:            UnsignedFixed;                            {rate multiplier to apply to sound}
  156.         leftVolume:                INTEGER;                                {volumes to apply to sound}
  157.         rightVolume:            INTEGER;
  158.         quality:                LONGINT;                                {quality to apply to sound}
  159.         filter:                    ComponentInstance;                        {filter to apply to sound}
  160.         moreRtn:                SoundParamUPP;                            {routine to call to get more data}
  161.         completionRtn:            SoundParamUPP;                            {routine to call when buffer is complete}
  162.         refCon:                    LONGINT;                                {user refcon}
  163.         result:                    INTEGER;                                {result}
  164.     END;
  165.  
  166.     SoundSource = Ptr;
  167.  
  168.     AudioInfo = RECORD
  169.         capabilitiesFlags:        LONGINT;                                {Describes device capabilities}
  170.         reserved:                LONGINT;                                {Reserved by Apple}
  171.         numVolumeSteps:            INTEGER;                                {Number of significant increments between min and max volume}
  172.     END;
  173.  
  174.     AudioInfoPtr = ^AudioInfo;
  175.  
  176. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  177. { functions for sound components}
  178. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  179. {Sound Component dispatch selectors}
  180.  
  181. CONST
  182. {these calls cannot be delegated}
  183.     kSoundComponentInitOutputDeviceSelect = 1;
  184.     kSoundComponentSetSourceSelect = 2;
  185.     kSoundComponentGetSourceSelect = 3;
  186.     kSoundComponentGetSourceDataSelect = 4;
  187.     kSoundComponentSetOutputSelect = 5;
  188.     kDelegatedSoundComponentSelectors = $0100;                    {first selector that can be delegated up the chain}
  189. {these calls can be delegated and have own range}
  190.     kSoundComponentAddSourceSelect = kDelegatedSoundComponentSelectors + 1;
  191.     kSoundComponentRemoveSourceSelect = kDelegatedSoundComponentSelectors + 2;
  192.     kSoundComponentGetInfoSelect = kDelegatedSoundComponentSelectors + 3;
  193.     kSoundComponentSetInfoSelect = kDelegatedSoundComponentSelectors + 4;
  194.     kSoundComponentStartSourceSelect = kDelegatedSoundComponentSelectors + 5;
  195.     kSoundComponentStopSourceSelect = kDelegatedSoundComponentSelectors + 6;
  196.     kSoundComponentPauseSourceSelect = kDelegatedSoundComponentSelectors + 7;
  197.     kSoundComponentPlaySourceBufferSelect = kDelegatedSoundComponentSelectors + 8;
  198.  
  199. {Audio Component selectors}
  200.     kAudioGetVolumeSelect        = 0;
  201.     kAudioSetVolumeSelect        = 1;
  202.     kAudioGetMuteSelect            = 2;
  203.     kAudioSetMuteSelect            = 3;
  204.     kAudioSetToDefaultsSelect    = 4;
  205.     kAudioGetInfoSelect            = 5;
  206.     kAudioGetBassSelect            = 6;
  207.     kAudioSetBassSelect            = 7;
  208.     kAudioGetTrebleSelect        = 8;
  209.     kAudioSetTrebleSelect        = 9;
  210.     kAudioGetOutputDeviceSelect    = 10;
  211.     kAudioMuteOnEventSelect        = 129;
  212.  
  213. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  214. { Sound Manager 3.0 utilities}
  215.  
  216. FUNCTION OpenMixerSoundComponent(outputDescription: SoundComponentDataPtr; outputFlags: LONGINT; VAR mixerComponent: ComponentInstance): OSErr;
  217.     {$IFC NOT GENERATINGCFM}
  218.     INLINE $203C, $0614, $0018, $A800;
  219.     {$ENDC}
  220. FUNCTION CloseMixerSoundComponent(ci: ComponentInstance): OSErr;
  221.     {$IFC NOT GENERATINGCFM}
  222.     INLINE $203C, $0218, $0018, $A800;
  223.     {$ENDC}
  224. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  225. { basic sound component functions}
  226. FUNCTION SoundComponentInitOutputDevice(ti: ComponentInstance; actions: LONGINT): ComponentResult;
  227.     {$IFC NOT GENERATINGCFM}
  228.     INLINE $2F3C, 4, 1, $7000, $A82A;
  229.     {$ENDC}
  230. FUNCTION SoundComponentSetSource(ti: ComponentInstance; sourceID: SoundSource; source: ComponentInstance): ComponentResult;
  231.     {$IFC NOT GENERATINGCFM}
  232.     INLINE $2F3C, 8, 2, $7000, $A82A;
  233.     {$ENDC}
  234. FUNCTION SoundComponentGetSource(ti: ComponentInstance; sourceID: SoundSource; VAR source: ComponentInstance): ComponentResult;
  235.     {$IFC NOT GENERATINGCFM}
  236.     INLINE $2F3C, 8, 3, $7000, $A82A;
  237.     {$ENDC}
  238. FUNCTION SoundComponentGetSourceData(ti: ComponentInstance; VAR sourceData: SoundComponentDataPtr): ComponentResult;
  239.     {$IFC NOT GENERATINGCFM}
  240.     INLINE $2F3C, 4, 4, $7000, $A82A;
  241.     {$ENDC}
  242. FUNCTION SoundComponentSetOutput(ti: ComponentInstance; requested: SoundComponentDataPtr; VAR actual: SoundComponentDataPtr): ComponentResult;
  243.     {$IFC NOT GENERATINGCFM}
  244.     INLINE $2F3C, 8, 5, $7000, $A82A;
  245.     {$ENDC}
  246. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  247. { junction methods for the mixer, must be called at non-interrupt level}
  248. FUNCTION SoundComponentAddSource(ti: ComponentInstance; VAR sourceID: SoundSource): ComponentResult;
  249.     {$IFC NOT GENERATINGCFM}
  250.     INLINE $2F3C, 4, $0101, $7000, $A82A;
  251.     {$ENDC}
  252. FUNCTION SoundComponentRemoveSource(ti: ComponentInstance; sourceID: SoundSource): ComponentResult;
  253.     {$IFC NOT GENERATINGCFM}
  254.     INLINE $2F3C, 4, $0102, $7000, $A82A;
  255.     {$ENDC}
  256. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  257. { info methods}
  258. FUNCTION SoundComponentGetInfo(ti: ComponentInstance; sourceID: SoundSource; selector: OSType; infoPtr: UNIV Ptr): ComponentResult;
  259.     {$IFC NOT GENERATINGCFM}
  260.     INLINE $2F3C, 12, $0103, $7000, $A82A;
  261.     {$ENDC}
  262. FUNCTION SoundComponentSetInfo(ti: ComponentInstance; sourceID: SoundSource; selector: OSType; infoPtr: UNIV Ptr): ComponentResult;
  263.     {$IFC NOT GENERATINGCFM}
  264.     INLINE $2F3C, 12, $0104, $7000, $A82A;
  265.     {$ENDC}
  266. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  267. { control methods}
  268. FUNCTION SoundComponentStartSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  269.     {$IFC NOT GENERATINGCFM}
  270.     INLINE $2F3C, 6, $0105, $7000, $A82A;
  271.     {$ENDC}
  272. FUNCTION SoundComponentStopSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  273.     {$IFC NOT GENERATINGCFM}
  274.     INLINE $2F3C, 6, $0106, $7000, $A82A;
  275.     {$ENDC}
  276. FUNCTION SoundComponentPauseSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  277.     {$IFC NOT GENERATINGCFM}
  278.     INLINE $2F3C, 6, $0107, $7000, $A82A;
  279.     {$ENDC}
  280. FUNCTION SoundComponentPlaySourceBuffer(ti: ComponentInstance; sourceID: SoundSource; pb: SoundParamBlockPtr; actions: LONGINT): ComponentResult;
  281.     {$IFC NOT GENERATINGCFM}
  282.     INLINE $2F3C, 12, $0108, $7000, $A82A;
  283.     {$ENDC}
  284. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  285. { interface for Audio Components}
  286. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  287. {Volume is described as a value between 0 and 1, with 0 indicating minimum
  288.   volume and 1 indicating maximum volume; if the device doesn't support
  289.   software control of volume, then a value of unimpErr is returned, indicating
  290.   that these functions are not supported by the device}
  291. FUNCTION AudioGetVolume(ac: ComponentInstance; whichChannel: INTEGER; VAR volume: ShortFixed): ComponentResult;
  292.     {$IFC NOT GENERATINGCFM}
  293.     INLINE $2F3C, 6, 0, $7000, $A82A;
  294.     {$ENDC}
  295. FUNCTION AudioSetVolume(ac: ComponentInstance; whichChannel: INTEGER; volume: ShortFixed): ComponentResult;
  296.     {$IFC NOT GENERATINGCFM}
  297.     INLINE $2F3C, 4, 1, $7000, $A82A;
  298.     {$ENDC}
  299. {If the device doesn't support software control of mute, then a value of unimpErr is}
  300. {returned, indicating that these functions are not supported by the device}
  301. FUNCTION AudioGetMute(ac: ComponentInstance; whichChannel: INTEGER; VAR mute: INTEGER): ComponentResult;
  302.     {$IFC NOT GENERATINGCFM}
  303.     INLINE $2F3C, 6, 2, $7000, $A82A;
  304.     {$ENDC}
  305. FUNCTION AudioSetMute(ac: ComponentInstance; whichChannel: INTEGER; mute: INTEGER): ComponentResult;
  306.     {$IFC NOT GENERATINGCFM}
  307.     INLINE $2F3C, 4, 3, $7000, $A82A;
  308.     {$ENDC}
  309. {AudioSetToDefaults causes the associated device to reset its volume and mute values}
  310. {(and perhaps other characteristics, e.g. attenuation) to "factory default" settings}
  311. FUNCTION AudioSetToDefaults(ac: ComponentInstance): ComponentResult;
  312.     {$IFC NOT GENERATINGCFM}
  313.     INLINE $2F3C, 0, 4, $7000, $A82A;
  314.     {$ENDC}
  315. {This routine is required; it must be implemented by all audio components}
  316. FUNCTION AudioGetInfo(ac: ComponentInstance; info: AudioInfoPtr): ComponentResult;
  317.     {$IFC NOT GENERATINGCFM}
  318.     INLINE $2F3C, 4, 5, $7000, $A82A;
  319.     {$ENDC}
  320. FUNCTION AudioGetBass(ac: ComponentInstance; whichChannel: INTEGER; VAR bass: INTEGER): ComponentResult;
  321.     {$IFC NOT GENERATINGCFM}
  322.     INLINE $2F3C, 6, 6, $7000, $A82A;
  323.     {$ENDC}
  324. FUNCTION AudioSetBass(ac: ComponentInstance; whichChannel: INTEGER; bass: INTEGER): ComponentResult;
  325.     {$IFC NOT GENERATINGCFM}
  326.     INLINE $2F3C, 4, 7, $7000, $A82A;
  327.     {$ENDC}
  328. FUNCTION AudioGetTreble(ac: ComponentInstance; whichChannel: INTEGER; VAR Treble: INTEGER): ComponentResult;
  329.     {$IFC NOT GENERATINGCFM}
  330.     INLINE $2F3C, 6, 8, $7000, $A82A;
  331.     {$ENDC}
  332. FUNCTION AudioSetTreble(ac: ComponentInstance; whichChannel: INTEGER; Treble: INTEGER): ComponentResult;
  333.     {$IFC NOT GENERATINGCFM}
  334.     INLINE $2F3C, 4, 9, $7000, $A82A;
  335.     {$ENDC}
  336. FUNCTION AudioGetOutputDevice(ac: ComponentInstance; VAR outputDevice: Component): ComponentResult;
  337.     {$IFC NOT GENERATINGCFM}
  338.     INLINE $2F3C, 4, 10, $7000, $A82A;
  339.     {$ENDC}
  340. {This is routine is private to the AudioVision component.  It enables the watching of the mute key.}
  341. FUNCTION AudioMuteOnEvent(ac: ComponentInstance; muteOnEvent: INTEGER): ComponentResult;
  342.     {$IFC NOT GENERATINGCFM}
  343.     INLINE $2F3C, 2, 129, $7000, $A82A;
  344.     {$ENDC}
  345. CONST
  346.     uppSoundParamProcInfo = $000000D0; { FUNCTION (4 byte param): 1 byte result; }
  347.  
  348. FUNCTION NewSoundParamProc(userRoutine: SoundParamProcPtr): SoundParamUPP;
  349.     {$IFC NOT GENERATINGCFM }
  350.     INLINE $2E9F;
  351.     {$ENDC}
  352.  
  353. FUNCTION CallSoundParamProc(VAR pb: SoundParamBlockPtr; userRoutine: SoundParamUPP): BOOLEAN;
  354.     {$IFC NOT GENERATINGCFM}
  355.     INLINE $205F, $4E90;
  356.     {$ENDC}
  357.  
  358. {$ALIGN RESET}
  359. {$POP}
  360.  
  361. {$SETC UsingIncludes := SoundComponentsIncludes}
  362.  
  363. {$ENDC} {__SOUNDCOMPONENTS__}
  364.  
  365. {$IFC NOT UsingIncludes}
  366.  END.
  367. {$ENDC}
  368.